package com.ctsi.system.vo;

import com.ctsi.core.web.tree.INode;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 菜单响应VO
 *
 * @author wang xiao xiang
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MenuResVO implements INode {

	private static final long serialVersionUID = -4938482757075118107L;

	/**
	 * 菜单ID
	 */
	private Long id;
	/**
	 * 父id
	 */
	@ApiModelProperty(value = "父id")
	private Long pid;
	/**
	 * 父菜单ID
	 */
	private Long parentId;
	/**
	 * 父ids
	 */
	@ApiModelProperty(value = "父ids")
	private String hierarchy;
	/**
	 * 名称
	 */
	@ApiModelProperty(value = "名称")
	private String name;
	/**
	 * 编码
	 */
	@ApiModelProperty(value = "编码")
	private String code;
	/**
	 * 菜单类型（字典 0目录 1菜单 2按钮）
	 */
	@ApiModelProperty(value = "菜单类型（字典 0目录 1菜单 2按钮）")
	private Integer type;
	/**
	 * 图标
	 */
	@ApiModelProperty(value = "图标")
	private String icon;
	/**
	 * 路由地址
	 */
	@ApiModelProperty(value = "路由地址")
	private String router;
	/**
	 * 组件地址
	 */
	@ApiModelProperty(value = "组件地址")
	private String component;
	/**
	 * 权限标识
	 */
	@ApiModelProperty(value = "权限标识")
	private String permission;
	/**
	 * 应用分类（应用编码）
	 */
	@ApiModelProperty(value = "应用分类（应用编码）")
	private String application;
	/**
	 * 打开方式（字典 0无 1组件 2内链 3外链）
	 */
	@ApiModelProperty(value = "打开方式（字典 0无 1组件 2内链 3外链）")
	private Integer openType;
	/**
	 * 是否可见（Y-是，N-否）
	 */
	@ApiModelProperty(value = "是否可见（Y-是，N-否）")
	private String visible;
	/**
	 * 链接地址
	 */
	@ApiModelProperty(value = "链接地址")
	private String link;
	/**
	 * 重定向地址
	 */
	@ApiModelProperty(value = "重定向地址")
	private String redirect;
	/**
	 * 权重（字典 1系统权重 2业务权重）
	 */
	@ApiModelProperty(value = "权重（字典 1系统权重 2业务权重）")
	private Integer weight;
	/**
	 * 排序
	 */
	@ApiModelProperty(value = "排序")
	private Integer sort;
	/**
	 * 徽标
	 */
	@ApiModelProperty(value = "徽标")
	private String badge;
	/**
	 * 备注
	 */
	@ApiModelProperty(value = "备注")
	private String remark;
	/**
	 * 状态（字典 0正常 1停用 2删除）
	 */
	@ApiModelProperty(value = "状态（字典 0正常 1停用 2删除）")
	private Integer status;

	/**
	 * 子孙节点
	 */
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private List<INode> children;

	/**
	 * 是否有子孙节点
	 */
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private Boolean hasChildren;

	@Override
	public List<INode> getChildren() {
		if (this.children == null) {
			this.children = new ArrayList<>();
		}
		return this.children;

	}
}
